﻿#ifndef QMEMORYMONITOR_H
#define QMEMORYMONITOR_H

#include <QObject>
#include <QtGlobal>

#ifdef Q_OS_WIN
#include <windows.h>
#include <psapi.h>
#else
#include <QFile>
#include <QTextStream>
#include <unistd.h>
#endif

class QMemoryMonitor {
public:
    QMemoryMonitor();
    ~QMemoryMonitor();

    // 获取系统级物理内存使用情况（单位：MB）
    void getSystemPhysicalMemory(uint64_t &usageSize, uint64_t &totalSize);

    // 获取系统级虚拟内存使用情况（单位：MB）
    void getSystemVirtualMemory(uint64_t &usageSize, uint64_t &totalSize);

    // 获取进程级物理内存使用情况（pid=0表示当前进程，单位：MB）
    void getProcessPhysicalMemory(qint64 pid, uint64_t &usageSize);

    // 获取进程级虚拟内存使用情况（pid=0表示当前进程，单位：MB）
    void getProcessVirtualMemory(qint64 pid, uint64_t &usageSize);

private:
#ifdef Q_OS_WIN
    DWORDLONG getTotalPhysMem();
    DWORDLONG getAvailPhysMem();
    DWORDLONG getTotalVirtualMem();
    DWORDLONG getAvailVirtualMem();
    bool getProcessMemoryInfo(qint64 pid, uint64_t &workingSetSize, uint64_t &pagefileUsage);
#else
    bool readProcMemInfo(uint64_t &totalMem, uint64_t &freeMem);
#endif
};

#endif // QMEMORYMONITOR_H

